#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=16;
int n,a[MAXN][MAXN],f[MAXN][40000],mi[16],stat[40000],_sum;
int read(bool &flag)
{
	int x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')ch=getchar();
	while(ch>='0'&&ch<='9')
	{
		x=x*10+ch-'0';
		ch=getchar();
	}
	if(ch=='\n')flag=true;
	return x;
}
void dfs(int dep,int x,bool k)
{
	if(dep==n+1)
	{
		stat[++_sum]=x;
		return;
	}
	if(!k)dfs(dep+1,x+mi[dep],true);
	dfs(dep+1,x,false);
	return;
}
int main()
{
	bool flag=false;
	while((a[1][++n]=read(flag))&&!flag);
	for(int i=2;i<=n;++i)
		for(int j=1;j<=n;++j)
			scanf("%d",&a[i][j]);
	mi[0]=1;
	for(int i=1;i<=n;++i)mi[i]=mi[i-1]<<1;
	dfs(1,0,false);
	for(int k=1;k<=_sum;++k)
		for(int i=1;i<=n;++i)
			if(stat[k]&mi[i])
				f[1][k]+=a[1][i];
	for(int i=2;i<=n;++i)
	{
		for(int k=1;k<=_sum;++k)
		{
			int tmp=0;
			for(int j=1;j<=n;++j)if(stat[k]&mi[j])f[i][k]+=a[i][j];
			for(int l=1;l<=_sum;++l)
				if(!(stat[k]&stat[l])&&!(stat[k]<<1&stat[l])&&!(stat[l]<<1&stat[k]))tmp=max(tmp,f[i-1][l]);
			f[i][k]+=tmp;
		}
	}
	int ans=0;
	for(int i=1;i<=_sum;++i)ans=max(ans,f[n][i]);
	printf("%d\n",ans);
	return 0;
}
